home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / text / misc / RM4mat.lha / rm4mat.amiga.c < prev    next >
C/C++ Source or Header  |  1999-04-03  |  3KB  |  147 lines

  1. /* Program name: rm4mat.c
  2.    Remove format codes in .gb files without changing anything else.
  3.    May need to edit the file for better look after removing the format codes.
  4.    Usage: rm4mat file_name
  5.    Output: file_name.new
  6.    Author: Chenghong Wang
  7.    Date: 4/3/93
  8.    First revision: 4/18/93 -- converts /ZI(20) and /ZI(40) to characters
  9.  
  10.    This revision: 4/24/93 --  convert /ZI(15), /ZI(58), /ZI(66), /ZI(77), 
  11.                   /ZI(95), /ZI(97) and /ZI(98) to characters.
  12.    It also can print the unknown /ZI number onthe screen, and make a square
  13.      mark in the out_file.
  14.    It can be compiled by most C complier.  I have compiled it by Turbo C,
  15.      Turbo C++ and VAX C.
  16.    Zhouhong Zhang mezhan@sn01.sncc.lsu.edu   
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #define TRUE 1
  23. #define FALSE 0
  24.  
  25. char in_name[81];
  26. char out_name[81];
  27. char name[81];
  28. FILE *in_file;
  29. FILE *out_file;
  30.  
  31. void usage() {
  32.   fprintf(stderr, "Usage: rm4mat file_name\n");
  33.   exit(1);
  34. }
  35.  
  36. void open_file() {
  37.   if ((in_file = fopen(in_name, "r+b")) == NULL) {
  38.     fprintf(stderr, "Cannot open in_file\n");
  39.     exit(1);
  40.   }
  41.   if ((out_file = fopen(out_name, "w+b")) == NULL) {
  42.     fprintf(stderr, "Cannot open out_file\n");
  43.     exit(1);
  44.   }
  45. }
  46.  
  47. void rm4mat() {
  48.   int b, flag = FALSE, flag1 = FALSE;
  49.   unsigned int c;
  50.   int d;
  51.   char in_string[3];
  52.  
  53.   while ((b = fgetc(in_file)) != EOF) {
  54.     c = (unsigned int) b;
  55.     if (flag1 == TRUE) {
  56.       if (c == '\\' || c == '{' || c == '}' || c == '%' || c == '|') {
  57.     fputc(c, out_file);
  58.     flag = FALSE;
  59.       }
  60.       else if (c == 0xD7 && 
  61.            (fgetc(in_file) == 0xD6) && 
  62.            (fgetc(in_file) == '(') ) {
  63.     fgets(in_string,3,in_file);
  64.     d = atoi(in_string);
  65.     switch (d) {
  66.       case  0: break;   /* new */
  67.       case 15: fputc(0xB7,out_file);    /* new */
  68.            fputc(0xA2,out_file);
  69.            break;
  70.       case 20: fputc(0xB8,out_file);
  71.            fputc(0xC9,out_file);
  72.            break;
  73.       case 40: fputc(0xC0,out_file);
  74.            fputc(0xEF,out_file);
  75.            break;
  76.       case 58: fputc(0xCB,out_file);    /* new */
  77.            fputc(0xC9,out_file);
  78.            break;
  79.       case 66: fputc(0xCF,out_file);    /* new */
  80.            fputc(0xB5,out_file);
  81.            break;
  82.       case 77: fputc(0xB4,out_file);    /* new */
  83.            fputc(0xEB,out_file);
  84.            break;
  85.       case 95: fputc(0xC9,out_file);    /* new */
  86.            fputc(0xED,out_file);
  87.            break;
  88.       case 97: fputc(0xD7,out_file);    /* new */
  89.            fputc(0xBC,out_file);
  90.            break;
  91.       case 98: fputc(0xD3,out_file);    /* new */
  92.            fputc(0xE0,out_file);
  93.            break;
  94.       default: printf("%d\n", d);       /* new */
  95.            fputc(0xA1,out_file);
  96.            fputc(0xF5,out_file);
  97.            break;
  98.     }
  99.       }
  100.       flag1 = FALSE;
  101.       continue;
  102.     }
  103.     if (c == '\\') {
  104.       flag = TRUE;
  105.       flag1 = TRUE;
  106.       continue;
  107.     }
  108.     if (c == '}')
  109.       continue;
  110.     if (flag == TRUE) {
  111.       if (c == '.' || c == '{')
  112.     flag = FALSE;
  113.       continue;
  114.     }
  115.     if (c == '|')
  116.       fputc('\t', out_file);
  117.     else
  118.       fputc(c, out_file);
  119.     if (c == 32)
  120.       fputc(32, out_file);
  121.   }
  122. }
  123.  
  124. int main (argc, argv)
  125. int argc;
  126. char *argv[];
  127.  
  128. {
  129.   if (argc <= 1)
  130.     usage();
  131.  
  132.   in_file = NULL;
  133.   out_file = NULL;
  134.  
  135.   strcpy(in_name, argv[1]);
  136.   sscanf(in_name, "%[^.]", name);
  137.   strcpy(out_name, "");
  138.   strcat(out_name, name);
  139.   strcat(out_name, ".new");
  140.  
  141.   open_file();
  142.   rm4mat();
  143.   return (0);
  144. }
  145.  
  146.  
  147.